STM32CubeMX

您所在的位置:网站首页 stm32f103 pwm互补输出 STM32CubeMX

STM32CubeMX

2023-06-17 15:44| 来源: 网络整理| 查看: 265

基本定时器TIM6(TIM7)的相关参数

Activated:激活TIM6,把前面的方框选中局表示激活了TIM6

One Pulse Mode:STM32F103定时器的One Pulse Mode是一种特殊的计数模式,它只产生一个脉冲输出信号,而不是周期性的信号输出。在这种模式下,计数器只进行一次计数,当计数器计数到预设的值时,就会产生一个脉冲信号,然后计数器会停止计数。这种模式通常用于需要生成单个脉冲信号的应用场景,例如PWM控制、测量脉冲宽度等。在STM32F103系列中,定时器的One Pulse Mode可以通过设置TIM_CR1寄存器中的OPM位来实现。

Counter Setting:计数设置

Prescaler(PSC -16 bits value):预分频器,简写PSC,16位,可设置的值范围是0--65535。在STM32F103中,计数器的时钟源可以是内部时钟源或外部时钟源。当使用内部时钟源时,PSC可以将时钟信号频率除以一个固定的分频系数,以降低计数器的时钟频率,从而扩大计数器的计时范围。当使用外部时钟源时,PSC还可以将外部时钟信号的频率与内部时钟源的频率进行比较,以实现更高的精度。

//例如,如果使用内部时钟源,并将PSC设置为7199, //则定时器的时钟频率将为72 MHz / (7199 + 1) = 10 kHz。 //这意味着计数器每计数10次,就会过去1毫秒。 //如果需要更长的计时范围,可以将PSC设置为更大的值。

Counter Mode:计数模式,基本定时器TIM6只能向上计数(UP)。

Counter Period(Auto Reload Register - 16 bit value):计数周期,STM32F103定时器的Auto Reload寄存器(ARR)用于设置定时器的计数周期。当定时器的计数器达到ARR的值时,定时器会自动重新加载ARR的值并继续计数。这样可以实现定时器的周期性计数,从而实现定时和计时的功能。

//以TIM6为例,如果ARR的值为9999,则定时器的计数周期为: //计数周期 = ARR + 1 = 10000 //当定时器的计数器计数到9999时,定时器会自动重新加载ARR的值为999,并继续计数。 //这样就可以实现定时器的周期性计数,从而实现定时的功能。 //需要注意的是,ARR的值不能超过定时器的计数器的最大值(例如对于16位定时器,最大值为65535), //否则会发生溢出。 //在实际应用中,需要根据具体的需求和系统时钟频率来选择合适的ARR的值,以实现所需的定时功能。

Auto-Reload Preload:自动重载预装载。STM32F103定时器的Auto Reload Preload(自动重载预装载)功能是用来控制定时器计数器的自动重装载和预装载的。它的作用是实现定时器计数器的精确控制和定时器溢出中断的触发。

Auto Reload Preload功能可以通过TIMx_CR1寄存器的ARPE位来开启或关闭。当该功能开启时,定时器会在计数器计满或达到比较值时自动装载计数器的初始值,从而实现计数器的自动重装载。同时,它还会预装载ARR寄存器的值,以确保在计数器重新装载之前,ARR的值已经被正确加载。

Auto Reload Preload功能的主要作用有两个:

精确控制定时器的计数范围:通过自动重装载功能,定时器可以在达到计数范围的上限时自动重新开始计数,从而实现更长的计时范围和更高的精度。

触发定时器溢出中断:当定时器计数器达到比较值或自动重装载时,定时器会触发溢出中断。通过预装载ARR寄存器的值,可以确保在溢出中断触发之前,ARR的值已经被正确加载,从而保证定时器溢出中断的精确性。

总之,STM32F103定时器的Auto Reload Preload功能可以实现定时器计数器的自动重载和预装载,从而实现更长的计时范围和更高的精度,并保证定时器溢出中断的精确性。

Trigger Output(TRGO)Parameter:

STM32F103定时器的Trigger Output功能可以用于同步多个定时器、DAC、ADC等外设的启动和停止。当一个定时器的计数器计数到预设值时,就会产生一个触发输出,可以将该输出信号连接到其他定时器或外设的启动输入端,以实现多个定时器或外设同步工作。

另外,Trigger Output还可以用于生成PWM信号。将定时器的输出比较模式设置为PWM模式,再将Trigger Output连接到PWM输出通道的更新触发输入端,就可以实现PWM信号的输出。这种方式可以在不占用CPU资源的情况下,生成高精度的PWM信号,广泛应用于电机控制、LED控制等领域。

Trigger event selection:触发事件选择

上图的三个备选项分别对应下面的配置

sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;

它指定了当定时器计数器达到自动重装载值时,输出触发信号将被置为低电平。

 sMasterConfig.MasterOutputTrigger = TIM_TRGO_ENABLE;

它指定了当计数器达到定时器的重载值时,输出触发信号将被触发。这种配置可以用于实现定时中断、嵌套定时器、时间戳等应用。

sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE;

它指定了当定时器计数器更新时,输出触发信号将被触发。这种配置可以用于控制PWM输出、测量脉冲宽度、生成周期性触发信号等应用。

回过头来看看STM32F103单片机定时器的工作原理

STM32F103单片机的基本定时器是一个16位定时器,它可以产生定时中断,并且可以通过软件或硬件触发。其工作原理如下:

在定时器初始化时,需要设置定时器的时钟源和计数模式。时钟源可以选择内部时钟或外部时钟,计数模式只能向上计数。

定时器开始工作后,计数器会不断累加,直到计数器的值与预设的计数值相等。

当计数器的值与预设的计数值相等时,定时器会产生一个中断请求,并且将计数器的值清零,重新开始计数。

在中断服务程序中,可以进行需要定时的操作,例如控制外设的开关、采集数据等等。

STM32F103单片机基本定时器(TIM)是一种基于计数器的定时器,其工作原理是通过计数器对定时时间进行计数,当计数器计数到设定值时,产生中断或触发其他事件。

基本定时器有以下相关寄存器:

TIMx_CR1寄存器:定时器控制寄存器1,用于配置定时器工作模式、计数模式、时钟分频等。

TIMx_PSC寄存器:预分频器寄存器,用于设置定时器时钟的预分频值,即将主时钟分频后作为定时器时钟。

TIMx_ARR寄存器:自动重载寄存器,用于设置计数器的上限值,当计数器计数到该值时,自动将计数器清零并产生中断或触发其他事件。

TIMx_CNT寄存器:计数器寄存器,用于存储当前的计数值。

TIMx_SR寄存器:状态寄存器,用于标记定时器事件的状态,如计数器溢出、比较匹配等。

通过对这些寄存器的配置和操作,可以实现基本定时器的各种功能。

基本定时器的功能----精确的延时

1、设置定时器的自动重载值;

2、设置定时器的计数值为0,从0 开始计数

3、开启定时器开始计数

4、读定时器的计数值,并判断计数值是否达到目标值;

5、到达目标值就关闭定时器

void Delay_us(uint16_t t) { uint16_t counter = 0; __HAL_TIM_SET_AUTORELOAD(&htim6, t); //设置自动重载值 __HAL_TIM_SET_COUNTER(&htim6,0);//设置计数器的值为0,从0开始计数 __HAL_TIM_ENABLE(&htim6); //使能TIM6 while(counter != t) { counter = __HAL_TIM_GET_COUNTER(&htim6);//一直读计数器的值,直到计数器的值到达自动重载值 } __HAL_TIM_DISABLE(&htim6);//关闭TIM6 } void Delay_ms(uint16_t t) { uint16_t i; for(i=0;iInstance==TIM6) { __HAL_RCC_TIM6_CLK_ENABLE(); /* 配置定时器中断*/ HAL_NVIC_SetPriority(TIM6_IRQn, 0, 0); HAL_NVIC_EnableIRQ(TIM6_IRQn); } } void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle) { if(tim_baseHandle->Instance==TIM6) { __HAL_RCC_TIM6_CLK_DISABLE(); HAL_NVIC_DisableIRQ(TIM6_IRQn); } }

2、开启定时器中断

在main函数中调用开始定时器中断函数

int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_TIM6_Init(); HAL_TIM_Base_Start_IT(&htim6); //开启定时器中断 while (1) { } }

3、回调函数中进行中断处理

void TIM6_IRQHandler(void) { HAL_TIM_IRQHandler(&htim6); } void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { cnt++; //因为定时器设置的分频系数是72,计数周期是1000,所以每次1ms就中断,1000次就是1s钟 if(cnt == 1000) { cnt = 0; HAL_GPIO_TogglePin(LED_R_GPIO_Port,LED_R_Pin); } } 基本定时器的功能----触发ADC工作

 可以参考下面的博文,定时器触发ADC模数转换

STM32学习----ADC模数转换(轮询、中断、定时器、DMA)_资深流水灯工程师的博客-CSDN博客



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3